import java.util.ArrayList;
import java.util.List;

/**
 * @author xhw
 */

public class DataTableView {
    //这个类是包含了转换视图的方法，将数据表转换为视图

    public static DataPivotTableView generatePivotTableView(DataGroups dataGroups, List<Aggregation> aggregations) {
        //生成一个视图
        DataPivotTableView dataPivotTableView = new DataPivotTableView();

        //获取分组键
        final ArrayList<GroupKey> groupKeys = new ArrayList<>(dataGroups.getGroupKeys());

        //获取行
        final List<List<String>> columnsKeys = groupKeys.stream().map(GroupKey::getColumnsKeys).distinct().toList();
        final List<List<String>> rowKeys = groupKeys.stream().map(GroupKey::getRowsKeys).distinct().toList();

        //设置一个表头
        //计算表头的长度
        int columnSize = rowKeys.size() + columnsKeys.size() * aggregations.size();

        //设置表头
        List<String> header = new ArrayList<>(columnSize);
        //添加表头属性
        header.addAll(dataGroups.getRowGroupAttributes());

        //将列属性和聚合函数添加到表头
        for (List<String> columnsKey : columnsKeys) {
            for (Aggregation aggregation : aggregations) {
                header.add(columnsKey.toString() + aggregation.getTitle());
            }
        }
        //添加表头
        dataPivotTableView.setHeader(header);

        //设置表格数据
        for (List<String> rowKey : rowKeys) {
            //设置行数据
            List<String> rows = new ArrayList<>(columnSize);
            //添加行属性
            rows.addAll(rowKey);
            //添加列数据
            for (List<String> columnsKey : columnsKeys) {
                for (Aggregation aggregation : aggregations) {
                    //获取聚合数据
                    Number value = dataGroups.caculateValues(aggregation).get(new GroupKey(rowKey, columnsKey));
                    rows.add(value.toString());

                }
            }
            //添加行数据
            dataPivotTableView.addRow(rows.iterator());

        }


        return dataPivotTableView;
    }
}
